package com.fowo.api.model.purchase.order;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fowo.api.common.validator.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;

/**
 * 采购订单 预览导入辅助模型(全字段为文本类型)
 * @author yl_ls
 */
@Getter
@Setter
public class PurchaseOrderImportPo {

  /** 采购单号 */
  @ExcelProperty("采购单号")
  private String purchaseOrderCode;

  /** 供应商 */
  @ExcelProperty("*供应商")
  @NotBlank(message = "供应商不能为空")
  @Size(max = 50, message = "供应商长度不能超过50")
  private String supplierIdSupplierName;

  @ExcelIgnore
  @Schema(title = "*供应商")
  private String supplierId;

  /** 供应商名称 */
  @ExcelProperty("供应商名称")
  @Size(max = 50, message = "供应商名称长度不能超过50")
  private String supplierName;

  /** 仓库 */
  @ExcelProperty("*仓库")
  @NotBlank(message = "仓库不能为空")
  @Size(max = 50, message = "仓库长度不能超过50")
  private String widName;

  @ExcelIgnore
  @Schema(title = "*仓库")
  private String wid;

  /** 仓库名 */
  @ExcelProperty("仓库名")
  @Size(max = 50, message = "仓库名长度不能超过50")
  private String warehouseName;

  /** 联系人 */
  @ExcelProperty("联系人")
  @Size(max = 50, message = "联系人长度不能超过50")
  private String contactPerson;

  /** 联系电话 */
  @ExcelProperty("联系电话")
  @Size(max = 50, message = "联系电话长度不能超过50")
  private String contactNumber;

  /** 结算方式 */
  @ExcelProperty("结算方式")
  private String settlementMethod;

  /** 预付比例 */
  @ExcelProperty("预付比例")
  @DecimalString(message = "预付比例小数格式不正确", label = "预付比例")
  private String advanceRatio;

  /** 结算描述 */
  @ExcelProperty("结算描述")
  @Size(max = 50, message = "结算描述长度不能超过50")
  private String settlementDescribe;

  /** 支付方式 */
  @ExcelProperty("支付方式")
  private String paymentMethod;

  /** 采购币种 */
  @ExcelProperty("采购币种")
  private String purchaseCurrency;

  /** 运费 */
  @ExcelProperty("运费")
  @DecimalString(message = "运费小数格式不正确", label = "运费")
  private String shippingPrice;

  /** 其它费用 */
  @ExcelProperty("其它费用")
  @DecimalString(message = "其它费用小数格式不正确", label = "其它费用")
  private String otherCurrency;

  /** 费用分摊方式 */
  @ExcelProperty("*费用分摊方式")
  @NotBlank(message = "费用分摊方式不能为空")
  @EnumsString(
    value = { " 不分摊", "按金额", " 按数量" },
    message = "费用分摊方式只能是“ 不分摊”, “按金额”, “ 按数量”中的一个"
  )
  private String feePartType;

  /** 含税 */
  @ExcelProperty("含税")
  @EnumsString(value = { "否", "是" }, message = "含税只能是“否”, “是”中的一个")
  private String includingTax;

  /** 采购员 */
  @ExcelProperty("*采购员")
  @NotBlank(message = "采购员不能为空")
  @Size(max = 50, message = "采购员长度不能超过50")
  private String optUidName;

  @ExcelIgnore
  @Schema(title = "*采购员")
  private String optUid;

  /** 采购方 */
  @ExcelProperty("采购方")
  @Size(max = 50, message = "采购方长度不能超过50")
  private String purchaserName;

  @ExcelIgnore
  @Schema(title = "采购方")
  private String purchaser;

  /** 产品类型 */
  @ExcelProperty("*产品类型")
  @NotBlank(message = "产品类型不能为空")
  @EnumsString(
    value = { "原材料", "成品" },
    message = "产品类型只能是“原材料”, “成品”中的一个"
  )
  private String productType;

  /** 单据负责人 */
  @ExcelProperty("单据负责人")
  @Size(max = 50, message = "单据负责人长度不能超过50")
  private String oversightUidName;

  @ExcelIgnore
  @Schema(title = "单据负责人")
  private String oversightUid;

  /** 质检类型 */
  @ExcelProperty("*质检类型")
  @NotBlank(message = "质检类型不能为空")
  @EnumsString(
    value = { "仓库质检", "预检", "免检" },
    message = "质检类型只能是“仓库质检”, “预检”, “免检”中的一个"
  )
  private String inspectionType;

  /** 备注 */
  @ExcelProperty("备注")
  @Size(max = 200, message = "备注长度不能超过200")
  private String remarks;

  /** 总金额 */
  @ExcelProperty("总金额")
  private String totalPrice;

  /** 到货量 */
  @ExcelProperty("到货量")
  @LongString(message = "到货量数值格式不正确", label = "到货量")
  private String quantityReceived;

  /** 组织名称 */
  @ExcelProperty("组织名称")
  @Size(max = 50, message = "组织名称长度不能超过50")
  private String orgName;

  /** 组织 */
  @ExcelProperty("组织")
  @Size(max = 50, message = "组织长度不能超过50")
  private String orgIdName;

  @ExcelIgnore
  @Schema(title = "组织")
  private String orgId;

  /** 申请部门 */
  @ExcelProperty("申请部门")
  @Size(max = 50, message = "申请部门长度不能超过50")
  private String applicationDepName;

  @ExcelIgnore
  @Schema(title = "申请部门")
  private String applicationDep;

  /** 申请人 */
  @ExcelProperty("申请人")
  @Size(max = 50, message = "申请人长度不能超过50")
  private String application;

  /** 状态 */
  @ExcelProperty("状态")
  private String stauts;

  /** 采购日期 */
  @ExcelProperty("采购日期")
  @DateString(message = "采购日期不是有效的日期格式")
  private String purchasesDate;

  /** 申请部门 */
  @ExcelProperty("申请部门")
  @Size(max = 50, message = "申请部门长度不能超过50")
  private String applicationDepName1;

  /** 采购数量 */
  @ExcelProperty("采购数量")
  private String purchaseQuantity;

  /** 审批状态 */
  @ExcelProperty("审批状态")
  @EnumsString(
    value = {
      "作废",
      "待提交",
      "待下单",
      "待到货",
      "已完成",
      "待审核(审批流)",
      "驳回(审批流)",
      "作废(审批流)",
    },
    message = "审批状态只能是“作废”, “待提交”, “待下单”, “待到货”, “已完成”, “待审核(审批流)”, “驳回(审批流)”, “作废(审批流)”中的一个"
  )
  private String anStatus;

  /** 采购单号 */
  @ExcelProperty("采购单号")
  @Size(max = 50, message = "采购单号长度不能超过50")
  private String purNumSear;

  /** 物流单号 */
  @ExcelProperty("物流单号")
  @Size(max = 50, message = "物流单号长度不能超过50")
  private String logOrderSear;

  /** 计划编号 */
  @ExcelProperty("计划编号")
  @Size(max = 50, message = "计划编号长度不能超过50")
  private String planOrderSear;

  /** 1688订单号 */
  @ExcelProperty("1688订单号")
  @Size(max = 50, message = "1688订单号长度不能超过50")
  private String numOrderSear;

  /** 单据备注 */
  @ExcelProperty("单据备注")
  @Size(max = 50, message = "单据备注长度不能超过50")
  private String orderRemarkSear;

  /** 采购员 */
  @ExcelProperty("采购员")
  @Size(max = 50, message = "采购员长度不能超过50")
  private String purSear;

  /** 退款勾稽字段 */
  @ExcelProperty("退款勾稽字段")
  @IntegerString(
    message = "退款勾稽字段数值格式不正确",
    label = "退款勾稽字段",
    min = 0
  )
  private String crossChecking;

  /** 到货状态 */
  @ExcelProperty("到货状态")
  @EnumsString(
    value = { "未到货", "部分到货", "全部到货" },
    message = "到货状态只能是“未到货”, “部分到货”, “全部到货”中的一个"
  )
  private String arrivalStatus;

  /** 下单时间 */
  @ExcelProperty("下单时间")
  @DateTimeString(message = "下单时间不是有效的时间日期格式")
  private String orderTime;

  /** 供应商代码 */
  @ExcelProperty("供应商代码")
  @Size(max = 50, message = "供应商代码长度不能超过50")
  private String supplierCode;

  /** 仓库编码 */
  @ExcelProperty("仓库编码")
  @Size(max = 50, message = "仓库编码长度不能超过50")
  private String wcode;

  /** 付款状态 */
  @ExcelProperty("付款状态")
  @EnumsString(
    value = { "未申请", "已申请", "部分付款", "已付款" },
    message = "付款状态只能是“未申请”, “已申请”, “部分付款”, “已付款”中的一个"
  )
  private String payStatus;

  /** 采购组织 */
  @ExcelProperty("*采购组织")
  @NotBlank(message = "采购组织不能为空")
  @Size(max = 50, message = "采购组织长度不能超过50")
  private String purchasesOrgName;

  @ExcelIgnore
  @Schema(title = "*采购组织")
  private String purchasesOrg;

  /** 结算组织 */
  @ExcelProperty("*结算组织")
  @NotBlank(message = "结算组织不能为空")
  @Size(max = 50, message = "结算组织长度不能超过50")
  private String settlementOrgName;

  @ExcelIgnore
  @Schema(title = "*结算组织")
  private String settlementOrg;

  /** 加急 */
  @ExcelProperty("加急")
  private String urgentOrNot;

  /** 下单人 */
  @ExcelProperty("下单人")
  @Size(max = 50, message = "下单人长度不能超过50")
  private String orderUserName;

  @ExcelIgnore
  @Schema(title = "下单人")
  private String orderUser;

  /** 进度日志 */
  @ExcelProperty("进度日志")
  @Size(max = 500, message = "进度日志长度不能超过500")
  private String progresslog;

  /** 待到货量 */
  @ExcelProperty("待到货量")
  @IntegerString(
    message = "待到货量数值格式不正确",
    label = "待到货量",
    min = 0
  )
  private String quantityReceive;

  /** 退货量 */
  @ExcelProperty("退货量")
  @IntegerString(message = "退货量数值格式不正确", label = "退货量", min = 0)
  private String quantityReturn;

  /** 到货货值 */
  @ExcelProperty("到货货值")
  @DecimalString(message = "到货货值小数格式不正确", label = "到货货值")
  private String receivedGoodsValues;

  /** 退款金额 */
  @ExcelProperty("退款金额")
  @DecimalString(message = "退款金额小数格式不正确", label = "退款金额")
  private String returnMoney;
}
